package com.yangcan.code.utils;

import java.util.Hashtable;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import android.graphics.Bitmap;

public class Utils {
	/**
	 * 用字符串生成二维码
	 *
	 * @param text
	 * @param QR_WIDTH
	 *            编码时指定图片的宽
	 * @param QR_HEIGHT
	 *            编码时指定图片的高
	 * @return Bitmap 返回一张图片
	 * @throws WriterException
	 * @throw
	 */
	public static Bitmap generateBitmap(String text, int QR_WIDTH, int QR_HEIGHT) {
		try {
			if (text == null || "".equals(text) || text.length() < 1) {
				return null;
			}
			Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
			hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
			// 比特矩阵
			BitMatrix bitMatrix = new QRCodeWriter().encode(text, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
			int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
			// 比特矩阵转颜色数组
			for (int y = 0; y < QR_HEIGHT; y++) {
				for (int x = 0; x < QR_WIDTH; x++) {
					if (bitMatrix.get(x, y)) {
						pixels[y * QR_WIDTH + x] = 0xff000000;// 黑点
					} else {
						pixels[y * QR_WIDTH + x] = 0x00ffffff;// 透明点,白点为0xffffffff
					}

				}
			}

			// 解析颜色数组,其他的java平台可以选择其他的API
			Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888);

			bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
			return bitmap;

		} catch (WriterException e) {
			e.printStackTrace();
			return null;
		}
	}
}
